import 'package:flutter/material.dart';
import 'custom_widget/animated_sector_progress.dart';
import 'package:library_base/widget/shot_view.dart';
import 'dart:typed_data';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});



  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Animated Sector Demo',
      theme: ThemeData(primarySwatch: Colors.blue),
      home:  DemoScreen(),
    );
  }
}

class DemoScreen extends StatefulWidget {
  const DemoScreen({super.key});

  // 2. 创建对应的 State 类（状态存储在这里）
  @override
  State<DemoScreen> createState() => _DemoScreenState();
}

class _DemoScreenState extends State<DemoScreen> {

  ShotController _shotController = ShotController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Animated Sector Progress')),
      body: Column(
        children: [
          ShotView(
              child: ElevatedButton(
                onPressed: () async  {
                  // 关键：延迟到当前帧绘制完成后再截图
                  WidgetsBinding.instance.addPostFrameCallback((_) async {
                    try {
                      Uint8List? pngBytes = await _shotController.makeImageUint8List();
                      // 后续操作（如更新预览、保存等）
                      setState(() {
                        _screenshotBytes = pngBytes;
                      });
                      print("截图成功，字节长度：${pngBytes?.length}");
                    } catch (e) {
                      print("截图失败：$e");
                      ScaffoldMessenger.of(context).showSnackBar(
                        SnackBar(content: Text("截图失败：$e")),
                      );
                    }
                  });
                },
                child: Text("70% Width Button"),
              ),
              controller: _shotController,
          ),
          _buildScreenshotPreview(),
          SizedBox(
            width: 200,
            height: 300,
            child: FractionallySizedBox(
              widthFactor: 1,
              heightFactor: 0.2,
              child: SizedBox(
                width: 50,
                child: ElevatedButton(
                  onPressed: () {},
                  child: Text("70% Width Button"),
                ),
              ),
            ),
          ),
          const Center(
            // 使用我们的自定义组件
            child: SizedBox(
              width: 200,
              height: 200,
              child: AnimatedSectorProgress(
                ringColor: Colors.grey,
                sectorColor: Color(0xFFFFA500),
                // 橙色
                ringWidth: 15.0,
                animationDuration: 1500,
                // 1.5秒动画周期
                minSectorAngle: 30,
                maxSectorAngle: 270,
              ),
            ),
          ),
        ],
      ),
    );
  }

   Uint8List? _screenshotBytes; // 存储截图字节数据（null 表示未截图）


   // 构建截图预览组件（处理加载、空状态、错误状态）
   Widget _buildScreenshotPreview() {
     if (_screenshotBytes == null) {
       // 未截图时的提示
       return const Text("点击上方按钮截图后，这里会显示预览");
     } else {
       // 已截图：用 Image.memory 加载字节流
       return Container(
         width: 300, // 控制预览图宽度
         height: 100, // 控制预览图高度
         decoration: BoxDecoration(
           border: Border.all(color: Colors.grey), // 加边框便于区分
         ),
         // 核心组件：Image.memory
         child: Image.memory(
           _screenshotBytes!,
           fit: BoxFit.contain, // 图片适配方式（contain：完整显示，不拉伸）
           // 加载中占位符
           frameBuilder: (context, child, frame, wasSynchronouslyLoaded) {
             // 判断是否正在加载：frame 为 null 且不是同步加载完成
             if (frame == null && !wasSynchronouslyLoaded) {
               // 加载中：显示圆形进度条
               return const Center(child: CircularProgressIndicator(strokeWidth: 2));
             }
             // 加载完成/同步加载：显示图片
             return child;
           },
           // 加载失败占位符
           errorBuilder: (context, error, stackTrace) {
             return const Center(child: Text("图片加载失败"));
           },
         ),
       );
     }
   }

}
